package jnpf.database.enums;

import com.alibaba.druid.support.logging.Log;
import com.alibaba.druid.support.logging.LogFactory;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;

/**
 * 数据库 结构、参数 替换枚举 structure
 * @author JNPF开发平台组
 * @version V3.2.0
 * @copyright 引迈信息技术有限公司
 * @date 2021/6/29
 */
public enum DbSttEnum {

    /**
     * 数据库
     */
    DB_URL("{dbUrl}"){
        @Override
        public String getValByConn(Connection conn) {
            try {
                //驱动包含数据库类型
                logger.debug(conn.getMetaData().getDriverName().toLowerCase());
                return conn.getMetaData().getURL().toLowerCase().split("//")[0];
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    },
    DB_NAME("{dbName}"){
        @Override
        public String getValByConn(Connection conn) {
            try {
                //目录(mysql对应数据库)
                logger.debug("数据库名："+conn.getCatalog());
                return conn.getCatalog();
            } catch (SQLException e) {
                e.getMessage();
                e.printStackTrace();
            }
            return null;
        }
    },
    USER_NAME("{userName}"){
        @Override
        public String getValByConn(Connection conn) {
            try {
                //用户名
                logger.debug("用户名："+conn.getMetaData().getUserName());
                return conn.getMetaData().getUserName();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    },

    /**
     * 模式
     * schema关键字,加前缀
     */
    DB_SCHEMA("{dbSchema}") {
        @Override
        public String getValByConn(Connection conn) {
            try {
                //模式（mysql为空）
                logger.debug("模式："+conn.getSchema());
                logger.debug("用户名："+conn.getMetaData().getUserName());
                return conn.getMetaData().getUserName();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    },
    /**
     * 表空间
     */
    TABLE_SPACE("{tableSpace}") {
        @Override
        public String getValByConn(Connection conn) {
            return null;
        }
    },
    /**
     * 表
     */
    TABLE("{table}") {
        @Override
        public String getValByConn(Connection conn) {
            return null;
        }
    };




    /**
     * 替换目标
     */
    private String target;
    private static Log logger = LogFactory.getLog(DbSttEnum.class);

    public String getTarget(){
        return this.target;
    }

    /**
     *
     */

    DbSttEnum(String target){
        this.target = target;
    }


    public abstract String getValByConn(Connection conn);



}
